package com.itkaien.controller;
import com.github.pagehelper.PageInfo;
import com.itkaien.common.R;
import com.itkaien.pojo.Goods;
import com.itkaien.pojo.Inventory;
import com.itkaien.service.GoodsService;
import com.itkaien.service.InventoryService;
import java.math.BigDecimal;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 整个商品的增删改出
 * 基础功能实现
 */
@RestController
@RequestMapping("/goods")
@Slf4j
public class GoodsController {
    @Autowired
    private GoodsService goodsService;

    @Autowired
    private InventoryService inventoryService;

    /**
     * 添加商品方法添加时已经设置了添加时间
     * @param goods
     * @return
     */
    @PostMapping("/addgood")
    public R<String> addGood(Goods goods){
        goodsService.addgood(goods);
        return R.success("Goods added successfully");
    }

    /**
     * 修改商品信息方法修改时自动更新了更新时间
     * @param goods
     * @return
     */
    @PutMapping("/putgood")
    public R<String> updateByidGood(Goods goods){
        goodsService.updateByidGood(goods);
        return R.success("Goods updated successfully");
    }

    /**
     * 删除商品
     * @param ids
     * @return
     */
    @DeleteMapping("/deletegood")
    public R<String> deleteByidGood(@RequestParam("ids") List<Integer> ids){
        goodsService.deleteBatch(ids);
        return R.success("Goods delete successfully");
    }

    /**
     * 查询商品 并且分页 并且根据创建的时间降序查询 并且是用的模糊查询 参数有 商品名字的情况下可以实现模糊查询 没有则不启用
     * @param name
     * @param start
     * @param pageSize
     * @return
     */
    @GetMapping("/geteallgoodspage")
    public R<PageInfo> getGood(String name,@RequestParam("start") int start,@RequestParam("pageSize") int pageSize){
        PageInfo<Goods> pageInfo = goodsService.selectpageall(name, start, pageSize);
        return R.success(pageInfo);
    }

//    统计特定商品：
//    查询条件包含以下：
//            1.商品的身份标识
//            返回至少包含以下指定信息：
//            1. 商品当前库存
//            2. 现有商品总价
@GetMapping("/getgoodsbyid")
public R<Inventory> getGood(Integer goodsId,Integer storeId,String goodsName){
    Goods goods = goodsService.selectoneGood(goodsId);
    Inventory findinventory = inventoryService.findinventory(goodsId,storeId,goodsName);
    Integer quantity = findinventory.getQuantity();
    BigDecimal price = new BigDecimal(goods.getPrice()+"");
    BigDecimal num = new BigDecimal(quantity+"");
    BigDecimal totalPrice = price.multiply(num);
    double v = totalPrice.doubleValue();
    findinventory.setTotalmoney(v);
    return R.success(findinventory);
}
}
